package com.tssup.fesco.common.oss;

import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * OSS客户端
 *
 * @author shuchang.liao
 * @create 2017-05-15 11:00
 */
@Component
@Scope
public class AliOssClientFactory
{
	//private static AliOssClientFactory instance;

	private ClientConfiguration clientConfiguration;

	// endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket，请在控制台上查看域名。
	// 如果您还没有创建Bucket，endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”，
	// 链接地址是：https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
	// endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”，注意http://后不带bucket名称，
	// 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”，是错误的endpoint，请去掉其中的“bucket-name”。
	@Value("${aliyun.oss.endpoint}")
	private String endPoint;

	// accessKeyId和accessKeySecret是OSS的访问密钥，您可以在控制台上创建和查看，
	// 创建和查看访问密钥的链接地址是：https://ak-console.aliyun.com/#/。
	// 注意：accessKeyId和accessKeySecret前后都没有空格，从控制台复制时请检查并去除多余的空格。
	@Value("${aliyun.oss.accesskeyid}")
	private String accessKeyId;

	@Value("${aliyun.oss.accesskeysecret}")
	private String accessKeySecret;

	private AliOssClientFactory()
	{
		this.initialize();
	}

	/**
	 * 获取客户端对象
	 *
	 *            要连接的OSS服务器信息
	 * @return 返回客户端对象
	 */
	public OSSClient getClient()
	{
		OSSClient client2 = new OSSClient(endPoint, accessKeyId ,accessKeySecret, this.clientConfiguration);

		return client2;
	}

	//public static synchronized AliOssClientFactory getInstance()
	//{
	//	if (null == instance) { instance = new AliOssClientFactory(); }
    //
	//	return instance;
	//}

	private void initialize()
	{
		this.clientConfiguration = new ClientConfiguration();
		this.clientConfiguration.setMaxConnections(100);
		this.clientConfiguration.setConnectionTimeout(5000);
		this.clientConfiguration.setMaxErrorRetry(5);
		this.clientConfiguration.setSocketTimeout(2000);
	}
}